package com.zyg.manager.service.impl;

import com.alibaba.fastjson.JSON;
import com.zyg.manager.entity.SpecificationOptionEntity;
import com.zyg.manager.service.SpecificationOptionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zyg.common.utils.PageUtils;
import com.zyg.common.utils.Query;

import com.zyg.manager.dao.TypeTemplateDao;
import com.zyg.manager.entity.TypeTemplateEntity;
import com.zyg.manager.service.TypeTemplateService;


@Service("typeTemplateService")
public class TypeTemplateServiceImpl extends ServiceImpl<TypeTemplateDao, TypeTemplateEntity> implements TypeTemplateService {



    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private SpecificationOptionService optionService;


    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<TypeTemplateEntity> page = this.page(
                new Query<TypeTemplateEntity>().getPage(params),
                new QueryWrapper<TypeTemplateEntity>()
        );

        return new PageUtils(page);
    }
    /**
     * 作者 : LMY
     * 功能 :
     *根据模板id：查出以下数据放入Redis中
     * 1、查出询品牌列表
     * 2、查出规格列表以及对应的规格选项
     * 时间 : 2021/11/2 23:02
     */
    @Override
    public TypeTemplateEntity findById(Long id) {
        //1. 根据ID查询出模板对象
        TypeTemplateEntity templateEntity = this.getById(id);

        //2. 查出出品牌列表，放入Redis
        //2.1 拿到品牌列表的字符串
        String brandStr = templateEntity.getBrandIds();
        //2.2 转换为list<map> 的集合
        List<Map> brandList = JSON.parseArray(brandStr, Map.class);

        //3. 查出规格列表以及对应的规格选项
        //3.1 拿到规格列表字符串
        String specStr = templateEntity.getSpecIds();
        //3.2 转换为list<map> 的集合
        List<Map> specList = JSON.parseArray(specStr, Map.class);
        System.out.println("specList = " + specList);
        //3.3 遍历集合，根据每个规格的id查出对应的规格列表绑定到一个map对象
        for (Map spec : specList) {
            System.out.println("text = " + spec.get("text"));
            //① 取出spec id值
            Integer specId = (Integer) spec.get("id");
            //② 根据id查出对应的规格选项列表
            List<SpecificationOptionEntity> options = optionService.list(new QueryWrapper<SpecificationOptionEntity>().eq("spec_id", specId));
            //③ 存放到map
            spec.put("options",options);
        }

        //4. 存入数据到Redis
        redisTemplate.boundHashOps("brandList").put(id+"", JSON.toJSONString(brandList));
        redisTemplate.boundHashOps("specList").put(id+"",JSON.toJSONString(specList));

        return templateEntity;
    }

}